package com.yuandian.customer.perception.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuandian.api.customer_perception.po.OperatorOverviewParams;
import com.yuandian.api.customer_perception.vo.*;
import com.yuandian.po.MultipleTableInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 操作员监控
 * <p>
 *
 * @author lijunhang
 * @date 2021/8/16
 * @since 1.0.0
 */

public interface OperatorMonitorMapper {

    /**
     * 操作员总览-操作员总览列表
     * @param params 请求参数
     * @param page 分页参数
     * @param tableInfos 表名
     * @return 操作员总览列表数据
     */
    List<OperatorOverviewVo> operatorOverviewList(@Param("params") OperatorOverviewParams params, Page<OperatorOverviewVo> page,
												  @Param("tableInfos") List<MultipleTableInfo> tableInfos);


    /**
     * 操作员总览-操作员总览列表-不分页
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 操作员总览列表数据
     */
    List<OperatorOverviewVo> operatorOverviewList(@Param("params") OperatorOverviewParams params,
                                                  @Param("tableInfos") List<MultipleTableInfo> tableInfos);



    /**
     * 操作员总览-查询操作员当前在线人数
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 查询操作员当前在线人数
     */
    int operatorOnlineNum(@Param("params") OperatorOverviewParams params,
                          @Param("tableInfos") List<MultipleTableInfo> tableInfos);



    /**
     * 操作员总览-操作员业务受理量top5
     * @param params 请求参数
     * @param operatorIds
     * @param tableInfos 表名
     * @return 操作员业务受理量top5数据
     */
    List<OperatorCompleteTopVo> operatorCompleteTop5(@Param("params") OperatorOverviewParams params,
													 @Param("list") List<String> operatorIds,
													 @Param("tableInfos") List<MultipleTableInfo> tableInfos);

    /**
     * 操作员总览-人工操作平均耗时Top5
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 人工操作平均耗时Top5数据
     */
    List<OperatorCompleteTimeTopVo> operatorCompleteTimeTop5(@Param("params") OperatorOverviewParams params,
															 @Param("tableInfos") List<MultipleTableInfo> tableInfos);

    /**
     * 操作员活跃数量
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 操作员活跃数量数据
     */
    List<OperatorActiveCountVo> operatorActiveCount(@Param("params") OperatorOverviewParams params,
													@Param("tableInfos") List<MultipleTableInfo> tableInfos);


    /**
     * 操作员总览-操作员违规告警提示列表-不分页
     * @param params 请求参数
     * @return 操作员违规告警提示列表数据
     */
    List<OperatorViolationVo> operatorViolationList(@Param("params") OperatorOverviewParams params);

    /**
     * 操作员总览-查询指定业务员近一月的违规业务最多的业务名称
     * @param params 请求参数
     * @return 指定业务员近一月的违规业务最多的业务名称
     */
    List<OperatorViolationVo> operatorBusinessName(@Param("params") OperatorOverviewParams params,@Param("list") List<String> operators);

    /**
     * 操作员总览-回填指定用户最近上线时间
     * @param params
     * @param operators
     * @param tableInfos 表名
     * @return
     */
    List<OperatorViolationVo> queryOnlineTimeByOperatorId(@Param("params") OperatorOverviewParams params,
                                                          @Param("list") List<String> operators,
                                                          @Param("tableInfos") List<MultipleTableInfo> tableInfos);
}
